<template>
  <div class="app-container">
    <!-- 登录页面 -->
    <LoginPage 
      v-if="!isLoggedIn" 
      @login-success="handleLoginSuccess"
    />
    
    <!-- 后台管理页面 -->
    <AdminDashboard 
      v-else 
      :userInfo="userInfo"
      @logout="handleLogout"
    />
  </div>
</template>

<script>
import LoginPage from './LoginPage.vue';
import AdminDashboard from './AdminDashboard.vue';

export default {
  name: 'MainApp',
  components: {
    LoginPage,
    AdminDashboard
  },
  data() {
    return {
      isLoggedIn: false,
      userInfo: null,
      sessionTimeout: 30 * 60 * 1000, // 30分钟会话超时
      activityTimer: null,
      warningTimer: null
    };
  },
  methods: {
    handleLoginSuccess(adminData) {
      console.log('主应用接收到管理员登录成功事件:', adminData);
      this.isLoggedIn = true;
      this.userInfo = adminData;
      
      // 保存登录状态到sessionStorage
      sessionStorage.setItem('isLoggedIn', 'true');
      sessionStorage.setItem('currentAdmin', JSON.stringify(adminData));
      sessionStorage.setItem('adminLoginTime', new Date().toISOString());
      sessionStorage.setItem('lastActivity', new Date().toISOString());
      
      // 启动会话管理
      this.startSessionManagement();
    },
    
    handleLogout() {
       console.log('管理员退出登录');
       
       // 记录退出时间
       const logoutTime = new Date().toISOString();
       console.log('退出时间:', logoutTime);
       
       // 清除会话管理
       this.clearSessionTimers();
       this.removeActivityListeners();
       
       // 清除组件状态
       this.isLoggedIn = false;
       this.userInfo = null;
      
      // 清除所有登录相关的存储
      try {
        // 清除会话存储
        sessionStorage.removeItem('currentAdmin');
        sessionStorage.removeItem('isLoggedIn');
        sessionStorage.removeItem('adminLoginTime');
        sessionStorage.removeItem('lastActivity');
        
        // 清除本地存储（保留记住用户名功能，除非用户明确要求清除）
        localStorage.removeItem('adminInfo');
        localStorage.removeItem('adminToken');
        localStorage.removeItem('adminPermissions');
        
        // 清除可能的缓存数据
        if ('caches' in window) {
          caches.keys().then(names => {
            names.forEach(name => {
              if (name.includes('admin') || name.includes('user')) {
                caches.delete(name);
              }
            });
          });
        }
        
        // 清除可能的IndexedDB数据
        if ('indexedDB' in window) {
          // 这里可以添加清除IndexedDB的逻辑
        }
        
        console.log('管理员登录状态已完全清除');
        
        // 可选：刷新页面以确保完全清除状态
        // window.location.reload();
        
      } catch (error) {
        console.error('清除登录状态时发生错误:', error);
        // 即使清除过程中出错，也要确保组件状态被重置
        this.isLoggedIn = false;
        this.userInfo = null;
      }
     },

     // 启动会话管理
     startSessionManagement() {
       // 清除之前的定时器
       this.clearSessionTimers();
       
       // 监听用户活动
       this.addActivityListeners();
       
       // 设置会话超时检查
       this.resetSessionTimer();
     },

     // 添加用户活动监听器
     addActivityListeners() {
       const events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];
       
       events.forEach(event => {
         document.addEventListener(event, this.updateLastActivity, true);
       });
     },

     // 移除用户活动监听器
     removeActivityListeners() {
       const events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];
       
       events.forEach(event => {
         document.removeEventListener(event, this.updateLastActivity, true);
       });
     },

     // 更新最后活动时间
     updateLastActivity() {
       if (this.isLoggedIn) {
         sessionStorage.setItem('lastActivity', new Date().toISOString());
         this.resetSessionTimer();
       }
     },

     // 重置会话定时器
     resetSessionTimer() {
       this.clearSessionTimers();
       
       // 设置警告定时器（会话超时前5分钟警告）
       this.warningTimer = setTimeout(() => {
         this.showSessionWarning();
       }, this.sessionTimeout - 5 * 60 * 1000);
       
       // 设置自动退出定时器
       this.activityTimer = setTimeout(() => {
         this.handleSessionTimeout();
       }, this.sessionTimeout);
     },

     // 清除会话定时器
     clearSessionTimers() {
       if (this.activityTimer) {
         clearTimeout(this.activityTimer);
         this.activityTimer = null;
       }
       if (this.warningTimer) {
         clearTimeout(this.warningTimer);
         this.warningTimer = null;
       }
     },

     // 显示会话即将超时警告
     showSessionWarning() {
       if (this.isLoggedIn) {
         const confirmed = confirm(
           '您的会话将在5分钟后超时。\n' +
           '点击"确定"继续使用，点击"取消"立即退出登录。'
         );
         
         if (confirmed) {
           // 用户选择继续，重置定时器
           this.updateLastActivity();
         } else {
           // 用户选择退出
           this.handleLogout();
         }
       }
     },

     // 处理会话超时
     handleSessionTimeout() {
       if (this.isLoggedIn) {
         alert('会话已超时，请重新登录。');
         this.handleLogout();
       }
     },
     
     checkLoginStatus() {
      // 检查是否有有效的管理员登录状态
      const isLoggedIn = sessionStorage.getItem('isLoggedIn');
      const savedAdmin = sessionStorage.getItem('currentAdmin');
      const lastActivity = sessionStorage.getItem('lastActivity');
      
      console.log('检查管理员登录状态:', { isLoggedIn, hasAdminData: !!savedAdmin });
      
      if (isLoggedIn === 'true' && savedAdmin) {
        try {
          // 检查会话是否超时
          if (lastActivity) {
            const lastActivityTime = new Date(lastActivity);
            const now = new Date();
            const timeDiff = now - lastActivityTime;
            
            if (timeDiff > this.sessionTimeout) {
              console.log('会话已超时，清除登录状态');
              this.handleLogout();
              alert('会话已超时，请重新登录。');
              return;
            }
          }
          
          const adminData = JSON.parse(savedAdmin);
          console.log('恢复管理员登录状态:', adminData);
          
          // 验证管理员数据的完整性
          if (adminData.username && adminData.role === 'admin') {
            this.isLoggedIn = true;
            this.userInfo = adminData;
            console.log('管理员登录状态恢复成功');
            
            // 启动会话管理
            this.startSessionManagement();
          } else {
            console.warn('管理员数据不完整，清除登录状态');
            this.handleLogout();
          }
        } catch (error) {
          console.error('解析管理员数据失败:', error);
          this.handleLogout();
        }
      } else {
        console.log('未找到有效的管理员登录状态');
        this.handleLogout();
      }
    }
  },
   
   // 组件销毁时清理
   beforeUnmount() {
     this.clearSessionTimers();
     this.removeActivityListeners();
   },
 
   // Vue 3 兼容
   beforeUnmount() {
     this.clearSessionTimers();
     this.removeActivityListeners();
   },
  
  mounted() {
    this.checkLoginStatus();
  }
};
</script>

<style scoped>
.app-container {
  width: 100%;
  height: 100vh;
  
}
</style>